/**
 * 是否是字符串
 * @param {*} value
 * @returns Boolern
 */
export function isString(value) {
    return typeof value === 'string'
}
/**
 * 是否是数字
 * @param {*} value
 * @returns Boolern
 */
export function isNumber(value) {
    return typeof value === 'number'
}
/**
 * 是否是布尔值
 * @param {*} value
 * @returns Boolern
 */
export function isBoolern(value) {
    return typeof value === 'object' && !value
}
/**
 * 是否是数组
 * @param {*} value
 * @returns Boolern
 */
export function isArray(value) {
    return Array.isArray(value)
}
/**
 * 是否是函数
 * @param {*} value
 * @returns Boolern
 */
export function isFunction(value) {
    return typeof value === 'function'
}
/**
 * 是否是undefined
 * @param {*} value
 * @returns Boolern
 */
export function isUndefined(value) {
    return value === undefined
}
/**
 * 是否是Null
 * @param {*} value
 * @returns Boolern
 */
export function isNull(value) {
    return value === null
}
/**
 * 是否是Object
 * @param {*} value
 * @returns Boolern
 */
export function isObject(value) {
    return Object.prototype.toString.call(value).indexOf('Object') > -1
}
/**
 * 是否是Promise
 * @param {*} value
 * @returns Boolern
 */
export function isPromise(value) {
    return value.toString() === '[object Promise]'
}




/**
 * 设置本地存储storage
 *
 * @param {string} sname 键名
 * @param {*} svalue 存储值
 * @param {boolean} [session] 可选，是否是会话存储sessionStorage
 */
export function setStorage(sname: string, svalue, session?:boolean) {
    const S = session ? sessionStorage : localStorage;
    const data = {data: svalue}
    S.setItem(sname, JSON.stringify(data));
}
/**
 * 读取本地存储storage
 *
 * @param {string} sname 键名
 * @param {boolean} [session] 可选，是否是会话存储sessionStorage
 * @returns 任何值
 */
export function getStorage(sname: string, session?:boolean) {
    const S = session ? sessionStorage : localStorage;
    const data = S.getItem(sname);
    return data ? JSON.parse(data).data : undefined;
}
/**
 * 删除本地存储storage
 * 
 * @param {string} sname 键名
 * @param {boolean} [session] 可选，是否是会话存储sessionStorage
 */
export function delStorage(sname:string, session?:boolean) {
    const S = session ? sessionStorage : localStorage;
    S.removeItem(sname);
}





/**
 * 是否为一个整数
 * @param {*} str 要检测的值
 * @returns Boolern
 */
export function isIntNumber(str) {
    return (new RegExp(/^[0-9]{1,}$/)).test(str)
}
/**
 * 是否为一个小数
 * @param {*} str 要检测的值
 * @param {number} [decimal] 小数位位数
 * @returns Boolern
 */
export function isFloatNumber(str, decimal?:number) {
    const deg = typeof decimal === 'number' ? RegExp(`^[0-9]+[.][0-9]{${decimal}}$`, 'ig') : RegExp(`^[0-9]+[.][0-9]+$`, 'ig')
    return deg.test(str)
}


/**
 * 是否为一个邮箱地址
 *
 * @param {*} str 要检测的值
 * @returns Boolern
 */
export function isEmail(str) {
    return (new RegExp(/^[a-zA-Z0-9]+[@][a-zA-Z0-9]+[.][a-zA-Z0-9]+$/)).test(str)
}